package com.gdust.lease.web.app.custom.config;

import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Info;
import io.swagger.v3.oas.models.info.License;
import org.springdoc.core.models.GroupedOpenApi;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * ClassName: Knife4jConfiguration
 * Package: com.gdust.lease.web.app.custom.config
 * Description:Knife4j配置类
 *
 * @Author syun
 * @Create 2025/2/8 20:06
 * @Version 1.0
 */
@Configuration
public class Knife4jConfiguration {

    /**
     * 配置用户端 APP 的 OpenAPI 文档信息
     *
     * @return OpenAPI 实例，包含 API 的基本信息，如标题、版本、描述、许可证等
     */
    @Bean
    public OpenAPI customerOpenAPI(){
        return new OpenAPI()
                .info(new Info()
                .title("APP接口")
                .version("1.0")
                .description("用户端APP接口")
                .termsOfService("http://doc.xiaominfo.com")
                .license(new License().name("Apache 2.0")
                        .url("http://doc.xiaominfo.com")));

    }

    /**
     * 配置 "登录信息" API 分组
     *
     * 该分组包含与用户登录相关的 API，如：
     * - `/app/login/**` 登录相关接口
     * - `/app/info` 用户信息接口
     *
     * @return GroupedOpenApi 实例，定义 API 分组及路径匹配规则
     */
    @Bean
    public GroupedOpenApi loginAPI(){
        return GroupedOpenApi.builder().group("登录信息").
                pathsToMatch("/app/login/**", "/app/info").
                build();
    }

    /**
     * 配置 "登录信息" API 分组
     *
     * 该分组包含与用户登录相关的 API，如：
     * - `/app/login/**` 登录相关接口
     * - `/app/info` 用户信息接口
     *
     * @return GroupedOpenApi 实例，定义 API 分组及路径匹配规则
     */
    @Bean
    public GroupedOpenApi personAPI(){
        return GroupedOpenApi.builder().group("个人信息").
                pathsToMatch(
                        "/app/history/**",
                        "/app/appointment/**",
                        "/app/agreement/**"
                ).
                build();
    }

    /**
     * 配置 "找房信息" API 分组
     *
     * 该分组包含与租房相关的 API，如：
     * - `/app/apartment/**` 公寓信息
     * - `/app/room/**` 房间信息
     * - `/app/payment/**` 付款信息
     * - `/app/region/**` 地区信息
     * - `/app/term/**` 租赁条款
     *
     * @return GroupedOpenApi 实例，定义 API 分组及路径匹配规则
     */
    @Bean
    public GroupedOpenApi lookForRoomAPI() {
        return GroupedOpenApi.builder().group("找房信息").
                pathsToMatch(
                        "/app/apartment/**",
                        "/app/room/**",
                        "/app/payment/**",
                        "/app/region/**",
                        "/app/term/**"
                ).
                build();
    }


}
